using SqlQueryBuilder.Clauses;
using SqlQueryBuilder.Util;

namespace SqlQueryBuilder.Queries
{
    /// <summary>
    /// SelectQuery interface
    /// </summary>
    public interface ISelectQuery : IWhereQuery, IInterrogationQuery
    {
        ISelectQuery Top(int value);
        ISelectQuery Distinct();
        ISelectQuery Join(JoinType joinType, string joinTable, IConditionalClause joinClause);
        ISelectQuery Join(JoinType joinType, string joinTable, string alias, IConditionalClause joinClause);
        ISelectQuery InnerJoin(string joinTable, IConditionalClause joinClause);
        ISelectQuery InnerJoin(string joinTable, string alias, IConditionalClause joinClause);
        ISelectQuery LeftJoin(string joinTable, IConditionalClause joinClause);
        ISelectQuery LeftJoin(string joinTable, string alias, IConditionalClause joinClause);
        ISelectQuery RightJoin(string joinTable, IConditionalClause joinClause);
        ISelectQuery RightJoin(string joinTable, string alias, IConditionalClause joinClause);
        ISelectQuery Join(string joinTable, IConditionalClause joinClause);
        ISelectQuery Join(string joinTable, string alias, IConditionalClause joinClause);
        ISelectQuery OrderBy(params string[] orderByFields);
        ISelectQuery OrderBy(bool ascendant, params string[] orderByFields);
        ISelectQuery GroupBy(params GroupByClause[] fields);
    }
}